<?php

require_once '../dlo/AquisicaoDLO.php';
require_once '../dlo/GrupoDLO.php';
require_once '../dlo/UsuarioDLO.php';

class AquisicaoController {

    private $cod_aquisicao;
    private $descricao;
    private $entidade_pessoa;
    private $row_id;
    private $campo_id;
    private $campo_valor;
    private $tipo_listagem;

    function __construct(&$cod_aquisicao, &$descricao, &$entidade_pessoa, &$row_id, &$campo_id, &$campo_valor, &$tipo_listagem) {
        $this->cod_aquisicao = &$cod_aquisicao;
        $this->descricao = &$descricao;
        $this->entidade_pessoa = &$entidade_pessoa;
        $this->row_id = &$row_id;
        $this->campo_id = &$campo_id;
        $this->campo_valor = &$campo_valor;
        $this->tipo_listagem = &$tipo_listagem;
    }

    public function cadastrar() {
        try {
            $dlo = &AquisicaoDLO::getInstance();
            $dlo->cadastrar($this->descricao, $this->entidade_pessoa);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function alterar() {
        try {
            $dlo = &AquisicaoDLO::getInstance();
            $dlo->alterar($this->row_id, $this->campo_id, $this->campo_valor);
            echo $this->campo_valor;
        } catch (Exception $e) {
            if ($e->getMessage() != 'no_action') {
                echo "Exception: " . $e->getMessage();
            } else {
                echo $this->campo_valor;
            }
        }
    }

    public function excluir() {
        try {
            $dlo = &AquisicaoDLO::getInstance();
            $dlo->excluir($this->cod_aquisicao);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function listar() {
        try {
            $recurso = 'aquisicao';
            $result = &GrupoDLO::getInstance()->consultarPermissao(UsuarioDLO::getInstance()->getCod_grupo(), $recurso);
            $alteracao = '';
            $exclusao = '<td></td>';
            if ($result['alteracao'] == 'S') {
                $alteracao = 'class="cell_editable" title="Clique duas vezes para editar"';
            }
            if ($result['consulta'] == 'S') {
                $dlo = &AquisicaoDLO::getInstance();
                $lista = &$dlo->listar();
                if ($this->tipo_listagem == 'tabela') {
                    foreach ($lista as $row) {
                        if ($result['exclusao'] == 'S') {
                            $exclusao = '<td width="10px"><div class="ui-state-default ui-corner-all"  style="float: left">
                                <a href="javascript: void(0)"><span id="trash" class="ui-icon ui-icon-trash" onclick="showConfirm(\'Confirma exclusão?\',function() {manutencaoAquisicao(\'excluir\',' . $row["cod_aquisicao"] . ');$(this).dialog(\'close\');})" title="Excluir"></span></a>
                            </div></td>';
                        }
                        echo '<tr id="' . $row["cod_aquisicao"] . '">';
                        echo '<td ' . $alteracao . ' id="descricao">' . $row["descricao"] . '</td>';
                        echo '<td ' . $alteracao . ' id="entidade_pessoa">' . $row["entidade_pessoa"] . '</td>';
                        echo $exclusao . '</tr>';
                    }
                } elseif ($this->tipo_listagem == 'xml') {
                    $xml = new XMLWriter();
                    $xml->openMemory();
                    $xml->startDocument('1.0', 'UTF-8');
                    $xml->startElement("lista");
                    foreach ($lista as $aquisicao) {
                        $xml->startElement("aquisicao");
                        $xml->writeElement('cod_aquisicao', $aquisicao['cod_aquisicao']);
                        $xml->writeElement('descricao', $aquisicao['descricao']);
                        $xml->writeElement('entidade_pessoa', $aquisicao['entidade_pessoa']);
                        $xml->endElement();
                    }
                    $xml->endElement();
                    header('Content-type: text/xml');
                    print $xml->outputMemory(true);
                } else if ($this->tipo_listagem == 'json') {
                    $aColumns = array('engine', 'browser', 'platform', 'version', 'grade');

                    /* Indexed column (used for fast and accurate table cardinality) */
                    $sIndexColumn = "id";

                    /* DB table to use */
                    $sTable = "ajax";
                    $limit = "";
                    if (isset($_GET['iDisplayStart']) && $_GET['iDisplayLength'] != '-1') {
                        $limit = "LIMIT " . mysql_real_escape_string($_GET['iDisplayStart']) . ", " .
                                mysql_real_escape_string($_GET['iDisplayLength']);
                    }


                    /*
                     * Ordering
                     */
                    if (isset($_GET['iSortCol_0'])) {
                        $order = "ORDER BY  ";
                        for ($i = 0; $i < intval($_GET['iSortingCols']); $i++) {
                            if ($_GET['bSortable_' . intval($_GET['iSortCol_' . $i])] == "true") {
                                $order .= $aColumns[intval($_GET['iSortCol_' . $i])] . "
				 	" . mysql_real_escape_string($_GET['sSortDir_' . $i]) . ", ";
                            }
                        }

                        $order = substr_replace($order, "", -2);
                        if ($order == "ORDER BY") {
                            $order = "";
                        }
                    }


                    /*
                     * Filtering
                     * NOTE this does not match the built-in DataTables filtering which does it
                     * word by word on any field. It's possible to do here, but concerned about efficiency
                     * on very large tables, and MySQL's regex functionality is very limited
                     */
                    $where = "";
                    if ($_GET['sSearch'] != "") {
                        $where = "WHERE (";
                        for ($i = 0; $i < count($aColumns); $i++) {
                            $where .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch']) . "%' OR ";
                        }
                        $where = substr_replace($where, "", -3);
                        $where .= ')';
                    }

                    /* Individual column filtering */
                    for ($i = 0; $i < count($aColumns); $i++) {
                        if ($_GET['bSearchable_' . $i] == "true" && $_GET['sSearch_' . $i] != '') {
                            if ($where == "") {
                                $where = "WHERE ";
                            } else {
                                $where .= " AND ";
                            }
                            $where .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch_' . $i]) . "%' ";
                        }
                    }


                    /*
                     * SQL queries
                     * Get data to display
                     */
                    $sQuery = "
		SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ", implode(", ", $aColumns)) . "
		FROM   $sTable
		$where
		$order
		$limit
	";
                    $rResult = mysql_query($sQuery, $gaSql['link']) or die(mysql_error());

                    /* Data set length after filtering */
                    $sQuery = "
		SELECT FOUND_ROWS()
	";
                    $rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error());
                    $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
                    $iFilteredTotal = $aResultFilterTotal[0];

                    /* Total data set length */
                    $sQuery = "SELECT COUNT(" . $sIndexColumn . ") FROM $sTable";
                    $rResultTotal = mysql_query($sQuery, $gaSql['link']) or die(mysql_error());
                    $aResultTotal = mysql_fetch_array($rResultTotal);
                    $iTotal = $aResultTotal[0];
                    $output = array(
                        "sEcho" => intval($_GET['sEcho']),
                        "iTotalRecords" => $iTotal,
                        "iTotalDisplayRecords" => $iFilteredTotal,
                        "aaData" => array()
                    );

                    while ($aRow = mysql_fetch_array($rResult)) {
                        $row = array();
                        for ($i = 0; $i < count($aColumns); $i++) {
                            if ($aColumns[$i] == "version") {
                                /* Special output formatting for 'version' column */
                                $row[] = ($aRow[$aColumns[$i]] == "0") ? '-' : $aRow[$aColumns[$i]];
                            } else if ($aColumns[$i] != ' ') {
                                /* General output */
                                $row[] = $aRow[$aColumns[$i]];
                            }
                        }
                        $output['aaData'][] = $row;
                    }
                    echo json_encode($lista);
                }
            } else {
                throw new Exception('Sem permissão de consulta!');
            }
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

}

$controller = new AquisicaoController($_POST['cod_aquisicao'], $_POST['descricao'], $_POST['entidade_pessoa'], $_POST['row_id'], $_POST['campo_id'], $_POST['campo_valor'], $_POST['tipo_listagem']);
if ($_POST['acao'] == 'cadastrar') {
    $controller->cadastrar();
} elseif ($_POST['acao'] == 'alterar') {
    $controller->alterar();
} elseif ($_POST['acao'] == 'excluir') {
    $controller->excluir();
} elseif ($_POST['acao'] == 'listar') {
    $controller->listar();
}
?>